ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¯ããã©ãŒãã³ã¹ãåŒãåºããã³ãŒããããã¡ã€ãªã³ã°ïŒããã«ããã¯ã®èšºæïŒãšãã¥ãŒãã³ã°ïŒä¿®æ£ïŒã®éãããå®è·µçãªäŸãéããŠåŠã¶ã
ããã©ãŒãã³ã¹æé©åïŒã³ãŒããããã¡ã€ãªã³ã°ãšãã¥ãŒãã³ã°ã®ãã€ãããã¯ãã¥ãª
仿¥ã®é«åºŠã«æ¥ç¶ãããã°ããŒãã«åžå Žã«ãããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯èŽ æ²¢åã§ã¯ãªããåºæ¬çãªèŠä»¶ã§ãããããæ°çŸããªç§ã®ã¬ã€ãã³ã·ãã顧客ã®åã³ãšå£²äžã®æå€±ãã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšãã©ã¹ãã¬ãŒã·ã§ã³ã®éã®éããçã¿åºãå¯èœæ§ããããŸããæ±äº¬ããããã³ãããµã³ããŠãããã¹ããã¯ãã«ã ãŸã§ããŠãŒã¶ãŒã¯ãœãããŠã§ã¢ãé«éã§ãå¿çæ§ãé«ããä¿¡é Œã§ããããšãæåŸ ããŠããŸãããããããšã³ãžãã¢ãªã³ã°ããŒã ã¯ãã©ã®ããã«ããŠãã®ã¬ãã«ã®ããã©ãŒãã³ã¹ãéæããã®ã§ããããïŒãã®çãã¯ãåœãŠæšéãæ©ãŸã£ãæé©åã§ã¯ãªãã2ã€ã®éèŠã§çžäºã«é¢é£ãããã©ã¯ãã£ã¹ãå«ããäœç³»çã§ããŒã¿ããªãã³ãªããã»ã¹ã«ãããŸããããã¯ãã³ãŒããããã¡ã€ãªã³ã°ãšããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã§ãã
å€ãã®éçºè ã¯ãããã®çšèªãåãæå³ã§äœ¿çšããŸãããæé©åã®æ ã®2ã€ã®ç°ãªã段éã衚ããŠããŸããå»çè¡çºã®ããã«èããŠãã ããããããã¡ã€ãªã³ã°ã¯ãå»åž«ãXç·ãMRIãªã©ã®ããŒã«ã䜿çšããŠåé¡ã®æ£ç¢ºãªåå ãèŠã€ããèšºææ®µéã§ãããã¥ãŒãã³ã°ã¯æ²»ç段éã§ãããå€ç§å»ã¯ãã®èšºæã«åºã¥ããŠæ£ç¢ºãªæè¡ãè¡ããŸãã蚺æãªãã§æè¡ãè¡ãããšã¯å»çé誀ã§ããããœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ã§ã¯ãç¡é§ãªåªåãè€éãªã³ãŒãããããŠå€ãã®å Žåãå®éã®ããã©ãŒãã³ã¹åäžã«ã€ãªãããªãçµæãæããŸãããã®ã¬ã€ãã§ã¯ãããã2ã€ã®äžå¯æ¬ ãªãã©ã¯ãã£ã¹ãè§£ãæãããã°ããŒãã«ãªèŠèŽè åãã«ãããé«éã§å¹ççãªãœãããŠã§ã¢ãæ§ç¯ããããã®æç¢ºãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
ããªãããçè§£ããïŒããã©ãŒãã³ã¹æé©åã®ããžãã¹ã±ãŒã¹
æè¡çãªè©³çްã«å ¥ãåã«ãããžãã¹ã®èгç¹ããããã©ãŒãã³ã¹ããªãéèŠãªã®ããçè§£ããããšãäžå¯æ¬ ã§ããã³ãŒãã®æé©åã¯ãåã«ç©äºãé«éåããããšã ãã§ã¯ãããŸãããããã¯ãå ·äœçãªããžãã¹ææãæšé²ããããšã§ãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšãªãã³ã·ã§ã³ã®åäžïŒäœéãªã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒãã€ã©ã€ã©ãããŸããäžçäžã®èª¿æ»ã«ãããšãããŒãžã®èªã¿èŸŒã¿æéã¯ãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšçŽåž°çã«çŽæ¥åœ±é¿ããŸããã¢ãã€ã«ã¢ããªã§ãããB2B SaaSãã©ãããã©ãŒã ã§ãããå¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãæºè¶³ãããæ»ã£ãŠããå¯èœæ§ãé«ããŸãã
- ã³ã³ããŒãžã§ã³çã®åäžïŒeã³ããŒã¹ãéèããŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³ãã©ãããã©ãŒã ã®å Žåãé床ã¯éã§ããAmazonãªã©ã®äŒæ¥ã¯ã100msã®ã¬ã€ãã³ã·ã§ããã売äžã1ïŒ æžå°ããå¯èœæ§ãããããšãæåã«ç€ºããŠããŸããã°ããŒãã«ããžãã¹ã«ãšã£ãŠããããã®ããããªå²åãæ°çŸäžãã«ã®åçã«ã€ãªãããŸãã
- ã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ãã®åæžïŒå¹ççãªã³ãŒãã¯ãããå°ãªããªãœãŒã¹ãå¿ èŠãšããŸããCPUãšã¡ã¢ãªã®äœ¿çšãæé©åããããšã«ãããã¢ããªã±ãŒã·ã§ã³ãããå°ãããããå®äŸ¡ãªãµãŒããŒã§å®è¡ã§ããŸããã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ã®æä»£ã«ã¯ã䜿çšããåã ãæéãæ¯æããããããã¯AWSãAzureãGoogle Cloudãªã©ã®ãããã€ããŒããã®æé¡æéã®çŽæ¥çãªåæžã«ã€ãªãããŸãã
- ã¹ã±ãŒã©ããªãã£ã®åäžïŒæé©åãããã¢ããªã±ãŒã·ã§ã³ã¯ãããå€ãã®ãŠãŒã¶ãŒãšããå€ãã®ãã©ãã£ãã¯ããåé¡ãªãåŠçã§ããŸããããã¯ãæ°ããåœéåžå Žãžã®æ¡å€§ãããã©ãã¯ãã©ã€ããŒãäž»èŠè£œåã®çºå£²ãªã©ã®ã€ãã³ãäžã®ããŒã¯ãã©ãã£ãã¯ã®åŠçãç®æãäŒæ¥ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- ãã©ã³ãè©å€ã®åŒ·åïŒé«éã§ä¿¡é Œæ§ã®é«ã補åã¯ãé«å質ã§ãããã§ãã·ã§ãã«ã§ãããšèªèãããŸããããã«ãããäžçäžã®ãŠãŒã¶ãŒãšã®ä¿¡é Œãæ§ç¯ãããç«¶äºã®æ¿ããåžå Žã§ã®ãã©ã³ãã®å°äœã匷åãããŸãã
ãã§ãŒãº1ïŒã³ãŒããããã¡ã€ãªã³ã° - 蚺æã®èžè¡
ãããã¡ã€ãªã³ã°ã¯ããã¹ãŠã®å¹æçãªããã©ãŒãã³ã¹äœæ¥ã®åºç€ã§ããããã¯ãããã°ã©ã ã®åäœãåæããŠãã³ãŒãã®ã©ã®éšåãæãå€ãã®ãªãœãŒã¹ãæ¶è²»ããŠãããã倿ããæé©åã®äž»èŠãªåè£ãšãªããçµéšçã§ããŒã¿ããªãã³ãªããã»ã¹ã§ãã
ã³ãŒããããã¡ã€ãªã³ã°ãšã¯ïŒ
ã³ãŒããããã¡ã€ãªã³ã°ã¯ãæ¬è³ªçã«ããœãããŠã§ã¢ã®å®è¡äžã®ããã©ãŒãã³ã¹ç¹æ§ã枬å®ããããšãå«ã¿ãŸããããã«ããã¯ãã©ãã«ããããæšæž¬ãã代ããã«ããããã¡ã€ã©ãŒã¯å ·äœçãªããŒã¿ãæäŸããŸããããã¯ã次ã®ãããªéèŠãªè³ªåã«çããŸãã
- ã©ã®é¢æ°ãŸãã¯ã¡ãœãããæãå€ãã®å®è¡æéãæ¶è²»ããŸããïŒ
- ã¢ããªã±ãŒã·ã§ã³ã¯ã©ãã ãã®ã¡ã¢ãªãå²ãåœãŠãŠãããã©ãã«æœåšçãªã¡ã¢ãªãªãŒã¯ããããŸããïŒ
- ç¹å®ã®é¢æ°ã¯äœååŒã³åºãããŠããŸããïŒ
- ã¢ããªã±ãŒã·ã§ã³ã¯ãCPUã®åŸ æ©ããŸãã¯ããŒã¿ããŒã¹ã¯ãšãªããããã¯ãŒã¯ãªã¯ãšã¹ããªã©ã®I/Oæäœã«å€ãã®æéãè²»ãããŠããŸããïŒ
ãã®æ å ±ããªããšãéçºè ã¯ãã°ãã°ãæ©ãŸã£ãæé©åãã®çœ ã«é¥ããŸããããã¯ãäŒèª¬çãªã³ã³ãã¥ãŒã¿ãŒç§åŠè ã§ããDonald Knuthããæåãªããã«ãæ©ãŸã£ãæé©åã¯ãã¹ãŠã®æªã®æ ¹æºã§ããããšè¿°ã¹ãŠããŸããããã«ããã¯ã§ã¯ãªãã³ãŒããæé©åããããšã¯æéã®ç¡é§ã§ãããå€ãã®å Žåãã³ãŒããããè€éã«ããä¿å®ãå°é£ã«ããŸãã
ãããã¡ã€ãªã³ã°ããäž»èŠãªã¡ããªã¯ã¹
ãããã¡ã€ã©ãŒãå®è¡ãããšãã¯ãç¹å®ã®ããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒãæ¢ããŠããŸããæãäžè¬çãªã¡ããªã¯ã¹ã«ã¯ä»¥äžãå«ãŸããŸãã
- CPUæéïŒCPUãç©æ¥µçã«ã³ãŒããåŠçããŠããæéãç¹å®ã®é¢æ°ã§é«ãCPUæéã¯ãèšç®éçŽåãã€ãŸããCPUããŠã³ããæäœã瀺ããŸãã
- ãŠã©ãŒã«ã¯ããã¯æéïŒãŸãã¯å®æéïŒïŒé¢æ°ã®éå§ããçµäºãŸã§ã®çµéæéããŠã©ãŒã«ã¯ããã¯æéãCPUæéããã¯ããã«é·ãå Žåãå€ãã®å Žåã颿°ããããã¯ãŒã¯å¿çããã£ã¹ã¯èªã¿åããªã©ã®ä»ã®ãã®ãåŸ æ©ããŠããããšãæå³ããŸãïŒãI/OããŠã³ããæäœïŒã
- ã¡ã¢ãªå²ãåœãŠïŒäœæããããªããžã§ã¯ãã®æ°ãšãããããæ¶è²»ããã¡ã¢ãªéã远跡ããŸããããã¯ãã¡ã¢ãªãªãŒã¯ïŒã¡ã¢ãªãå²ãåœãŠãããŠãè§£æŸãããªãïŒãç¹å®ããJavaãC#ãªã©ã®ãããŒãžãèšèªã§ã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒãžã®å§åã軜æžããããã«äžå¯æ¬ ã§ãã
- 颿°åŒã³åºãæ°ïŒå Žåã«ãã£ãŠã¯ã颿°èªäœã¯é ããããŸããããã«ãŒãå ã§æ°çŸäžååŒã³åºãããŸãããããã®ãããããã¹ããç¹å®ããããšããæé©åã«ãšã£ãŠäžå¯æ¬ ã§ãã
- I/OæäœïŒããŒã¿ããŒã¹ã¯ãšãªãAPIåŒã³åºãããã¡ã€ã«ã·ã¹ãã ã¢ã¯ã»ã¹ã«ããã£ãæéãæž¬å®ããŸããå€ãã®ææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ãI/OãæãéèŠãªããã«ããã¯ã§ãã
ãããã¡ã€ã©ãŒã®çš®é¡
ãããã¡ã€ã©ãŒã¯ããŸããŸãªæ¹æ³ã§åäœããããããã粟床ãšããã©ãŒãã³ã¹ãªãŒããŒãããã®ãã¬ãŒããªããæã£ãŠããŸãã
- ãµã³ããªã³ã°ãããã¡ã€ã©ãŒïŒãããã®ãããã¡ã€ã©ãŒã¯ãªãŒããŒããããäœãã§ããããã°ã©ã ã宿çã«äžæåæ¢ããã³ãŒã«ã¹ã¿ãã¯ïŒçŸåšå®è¡äžã®é¢æ°ã®ãã§ãŒã³ïŒã®ãã¹ãããã·ã§ããããååŸããããšã§æ©èœããŸãããããã®æ°åã®ãµã³ãã«ãéèšããããšã«ãããããã°ã©ã ãæéãè²»ãããŠããå Žæã®çµ±èšçãªç»åãäœæããŸããããã¯ãå€§å¹ ã«é床ãèœãšãããšãªããæ¬çªç°å¢ã§ã®ããã©ãŒãã³ã¹ã®æŠèŠãææ¡ããã®ã«åªããŠããŸãã
- ã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³ãããã¡ã€ã©ãŒïŒãããã®ãããã¡ã€ã©ãŒã¯éåžžã«æ£ç¢ºã§ããããªãŒããŒããããé«ããªããŸããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããïŒã³ã³ãã€ã«æãŸãã¯å®è¡æã«ïŒå€æŽããŠããã¹ãŠã®é¢æ°åŒã³åºãã®ååŸã«æž¬å®ããžãã¯ãæ¿å ¥ããŸããããã«ãããæ£ç¢ºãªã¿ã€ãã³ã°ãšåŒã³åºãæ°ãæäŸãããŸãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ç¹æ§ãå€§å¹ ã«å€æŽããå¯èœæ§ããããæ¬çªç°å¢ã«ã¯é©ããŠããŸããã
- ã€ãã³ãããŒã¹ãããã¡ã€ã©ãŒïŒãããã¯ãCPUã®ç¹å¥ãªããŒããŠã§ã¢ã«ãŠã³ã¿ãŒãå©çšããŠããã£ãã·ã¥ãã¹ãåå²äºæž¬ãã¹ãCPUãµã€ã¯ã«ãªã©ã®ã€ãã³ãã«é¢ããè©³çŽ°ãªæ å ±ãéåžžã«äœããªãŒããŒãããã§åéããŸãããããã¯åŒ·åã§ãããè§£éãããè€éã«ãªãå¯èœæ§ããããŸãã
äžçäžã§äœ¿çšãããŠããäžè¬çãªãããã¡ã€ãªã³ã°ããŒã«
ç¹å®ã®ããŒã«ã¯ããã°ã©ãã³ã°èšèªãšã¹ã¿ãã¯ã«ãã£ãŠç°ãªããŸãããååã¯æ®éçã§ãã以äžã¯ãåºã䜿çšãããŠãããããã¡ã€ã©ãŒã®äŸã§ãã
- JavaïŒVisualVMïŒJDKã«ä»å±ïŒãJProfilerãYourKit
- PythonïŒcProfileïŒçµã¿èŸŒã¿ïŒãpy-spyãScalene
- JavaScriptïŒNode.jsãšãã©ãŠã¶ïŒïŒChrome DevToolsã®ããã©ãŒãã³ã¹ã¿ããV8ã®çµã¿èŸŒã¿ãããã¡ã€ã©ãŒ
- .NETïŒVisual Studio Diagnostic ToolsãdotTraceãANTS Performance Profiler
- GoïŒpprofïŒåŒ·åãªçµã¿èŸŒã¿ãããã¡ã€ãªã³ã°ããŒã«ïŒ
- RubyïŒstackprofãruby-prof
- Application Performance ManagementïŒAPMïŒãã©ãããã©ãŒã ïŒæ¬çªã·ã¹ãã ã®å ŽåãDatadogãNew RelicãDynatraceãªã©ã®ããŒã«ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£å šäœã«ãããç¶ç¶çãªåæ£ãããã¡ã€ãªã³ã°ãæäŸããã°ããŒãã«ã«å±éãããŠããææ°ã®ãã€ã¯ããµãŒãã¹ããŒã¹ã®ã¢ãŒããã¯ãã£ã«éåžžã«åœ¹ç«ã¡ãŸãã
æ©æž¡ãïŒãããã¡ã€ãªã³ã°ããŒã¿ããå®è¡å¯èœãªæŽå¯ãž
ãããã¡ã€ã©ãŒã¯ã倧éã®ããŒã¿ãæäŸããŸããæ¬¡ã®éèŠãªã¹ãããã¯ããããè§£éããããšã§ãã颿°ã®ã¿ã€ãã³ã°ã®é·ããªã¹ããåã«çºããŠããã ãã§ã¯å¹æçã§ã¯ãããŸãããããã§ããŒã¿å¯èŠåããŒã«ãç»å ŽããŸãã
æã匷åãªå¯èŠåã®1ã€ã¯ãFlame Graphã§ãããã¬ã€ã ã°ã©ãã¯ãæéã®çµéã«äŒŽãã³ãŒã«ã¹ã¿ãã¯ã衚ããå¹ ã®åºãããŒã¯ãã¹ã¿ãã¯ã«é·ãéååšããŠãã颿°ïŒã€ãŸããããã©ãŒãã³ã¹ãããã¹ãããïŒã瀺ããŠããŸããã°ã©ãã®æãå¹ ã®åºãã¿ã¯ãŒã調ã¹ãããšã§ãããã©ãŒãã³ã¹åé¡ã®æ ¹æ¬åå ããã°ããç¹å®ã§ããŸãããã®ä»ã®äžè¬çãªå¯èŠåã«ã¯ãã³ãŒã«ããªãŒãšã¢ã€ã¹ã¯ã«ãã£ãŒãããããŸãã
ç®æšã¯ããã¬ãŒãã®æ³åïŒ80/20ã®æ³åïŒãé©çšããããšã§ããããã©ãŒãã³ã¹ã®åé¡ã®80ïŒ ãåŒãèµ·ãããŠããã³ãŒãã®20ïŒ ãæ¢ããŠããŸããããã«ãšãã«ã®ãŒãéäžãããæ®ãã¯åœé¢ç¡èŠããŠãã ããã
ãã§ãŒãº2ïŒããã©ãŒãã³ã¹ãã¥ãŒãã³ã° - æ²»çã®ç§åŠ
ãããã¡ã€ãªã³ã°ã§ããã«ããã¯ãç¹å®ãããããããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ãè¡ãæã§ããããã¯ããããã®ç¹å®ã®ããã«ããã¯ã軜æžããããã«ãã³ãŒããæ§æããŸãã¯ã¢ãŒããã¯ãã£ã倿Žããè¡çºã§ãã芳å¯ã«é¢ãããããã¡ã€ãªã³ã°ãšã¯ç°ãªãããã¥ãŒãã³ã°ã¯ã¢ã¯ã·ã§ã³ã«é¢ãããã®ã§ãã
ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ãšã¯ïŒ
ãã¥ãŒãã³ã°ã¯ããããã¡ã€ã©ãŒã«ãã£ãŠç¹å®ããããããã¹ããããžã®æé©åæè¡ã®ã¿ãŒã²ããã¢ããªã±ãŒã·ã§ã³ã§ããããã¯ç§åŠçãªããã»ã¹ã§ãã仮説ãç«ãŠïŒäŸïŒããã®ããŒã¿ããŒã¹ã¯ãšãªããã£ãã·ã¥ãããšãã¬ã€ãã³ã·ãççž®ããããšä¿¡ããŠããŸããïŒã倿Žãå®è£ ããçµæãæ€èšŒããããã«å床枬å®ããŸãããã®ãã£ãŒãããã¯ã«ãŒãããªããšãåã«å€æŽãç²ç®çã«è¡ãããšã«ãªããŸãã
äžè¬çãªãã¥ãŒãã³ã°æŠç¥
é©åãªãã¥ãŒãã³ã°æŠç¥ã¯ããããã¡ã€ãªã³ã°äžã«ç¹å®ãããããã«ããã¯ã®æ§è³ªã«å®å šã«äŸåããŸãã以äžã¯ãå€ãã®èšèªãšãã©ãããã©ãŒã ã«é©çšå¯èœãªãæãäžè¬çã§åœ±é¿åã®ããæŠç¥ã®äžéšã§ãã
1. ã¢ã«ãŽãªãºã æé©å
ããã¯ãæã圱é¿åã®ããã¿ã€ãã®æé©åã§ããããšããããããŸããã¢ã«ãŽãªãºã ã®éžæãæªããšãç¹ã«ããŒã¿ãã¹ã±ãŒãªã³ã°ããããšãããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãããããã¡ã€ã©ãŒã¯ããã«ãŒããã©ãŒã¹ã¢ãããŒãã䜿çšããŠããããã«é ã颿°ãææããå ŽåããããŸãã
- äŸïŒé¢æ°ã¯ã倧ããªäžŠã¹æ¿ããããŠããªããªã¹ãå ã®é ç®ãæ€çŽ¢ããŸããããã¯OïŒnïŒæäœã§ããã€ãŸãããããæéã¯ãªã¹ãã®ãµã€ãºã«æ¯äŸããŠå¢å ããŸãããã®é¢æ°ãé »ç¹ã«åŒã³åºãããå Žåããããã¡ã€ãªã³ã°ã¯ããã«ãã©ã°ãç«ãŠãŸãããã¥ãŒãã³ã°ã®æé ã¯ãç·åœ¢æ€çŽ¢ããOïŒ1ïŒãŸãã¯OïŒlog nïŒã®æ€çŽ¢æéãæäŸããããã·ã¥ãããããã©ã³ã¹ã®åãããã€ããªããªãŒãªã©ã®ããå¹ççãªããŒã¿æ§é ã«çœ®ãæããããšã§ãã100äžåã®é ç®ãå«ããªã¹ãã®å Žåãããã¯ããªç§ãšæ°ç§ã®éãã«ãªãå¯èœæ§ããããŸãã
2. ã¡ã¢ãªç®¡çã®æé©å
éå¹ççãªã¡ã¢ãªäœ¿çšã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒGCïŒãµã€ã¯ã«ã®é »åºŠãé«ããªãããšã«ã€ãªãããã¡ã¢ãªãäžè¶³ãããšã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãã
- ãã£ãã·ã¥ïŒãããã¡ã€ã©ãŒããäœéãªãœãŒã¹ïŒããŒã¿ããŒã¹ãå€éšAPIãªã©ïŒããåãããŒã¿ãç¹°ãè¿ããã§ããããŠããããšã瀺ããŠããå Žåããã£ãã·ã¥ã¯åŒ·åãªãã¥ãŒãã³ã°æè¡ã§ããé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããããé«éãªã€ã³ã¡ã¢ãªãã£ãã·ã¥ïŒRedisãã¢ããªã±ãŒã·ã§ã³å ãã£ãã·ã¥ãªã©ïŒã«ä¿åãããšãI/OåŸ æ©æéãåçã«ççž®ã§ããŸããã°ããŒãã«eã³ããŒã¹ãµã€ãã®å Žåãå°ååºæã®ãã£ãã·ã¥ã«è£œåã®è©³çްããã£ãã·ã¥ãããšããŠãŒã¶ãŒã®ã¬ã€ãã³ã·ãæ°çŸããªç§ççž®ã§ããŸãã
- ãªããžã§ã¯ãããŒãªã³ã°ïŒããã©ãŒãã³ã¹ãéèŠãªã³ãŒãã»ã¯ã·ã§ã³ã§ã¯ããªããžã§ã¯ããé »ç¹ã«äœæããã³ç Žæ£ãããšãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«å€§ããªè² è·ãããããŸãããªããžã§ã¯ãããŒã«ã¯ãäžé£ã®ãªããžã§ã¯ããäºåã«å²ãåœãŠãŠåå©çšããå²ãåœãŠãšã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããåé¿ããŸããããã¯ãã²ãŒã éçºãé«é »åºŠååŒã·ã¹ãã ããã®ä»ã®äœã¬ã€ãã³ã·ã¢ããªã±ãŒã·ã§ã³ã§äžè¬çã§ãã
3. I/Oãšã³ã³ã«ã¬ã³ã·ãŒã®æé©å
ã»ãšãã©ã®WebããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæå€§ã®ããã«ããã¯ã¯CPUã§ã¯ãªããI/Oã®åŸ æ©ã§ããã€ãŸããããŒã¿ããŒã¹ãAPIåŒã³åºãã®æ»ãããŸãã¯ãã£ã¹ã¯ããã®ãã¡ã€ã«ã®èªã¿åããåŸ æ©ããŸãã
- ããŒã¿ããŒã¹ã¯ãšãªã®ãã¥ãŒãã³ã°ïŒãããã¡ã€ã©ãŒã¯ãç¹å®ã®APIãšã³ããã€ã³ãããåäžã®ããŒã¿ããŒã¹ã¯ãšãªã®ããã«äœéã«ãªã£ãŠããããšãæããã«ããå ŽåããããŸãããã¥ãŒãã³ã°ã«ã¯ãããŒã¿ããŒã¹ããŒãã«ã«ã€ã³ããã¯ã¹ã远å ããããã¯ãšãªãããå¹ççã«æžãçŽãããïŒããšãã°ã倧ããªããŒãã«ã§ã®çµåãåé¿ãããªã©ïŒãããå°ãªãããŒã¿ããã§ãããããããããšãå«ãŸããŸããN+1ã¯ãšãªåé¡ã¯å žåçãªäŸã§ãããã¢ããªã±ãŒã·ã§ã³ãã¢ã€ãã ã®ãªã¹ããååŸããããã®ã¯ãšãªã1ã€å®è¡ããæ¬¡ã«åã¢ã€ãã ã®è©³çްãååŸããããã®Nåã®ã¯ãšãªãå®è¡ããŸããããããã¥ãŒãã³ã°ããã«ã¯ãã³ãŒãã倿ŽããŠãå¿ èŠãªãã¹ãŠã®ããŒã¿ã1ã€ã®ãããå¹ççãªã¯ãšãªã§ãã§ããããŸãã
- éåæããã°ã©ãã³ã°ïŒI/Oæäœãå®äºããã®ãåŸ æ©ããŠããéãã¹ã¬ããããããã¯ãã代ããã«ãéåæã¢ãã«ã䜿çšãããšããã®ã¹ã¬ããã¯ä»ã®äœæ¥ãè¡ãããšãã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ãå€ãã®åæãŠãŒã¶ãŒãåŠçããèœåãå€§å¹ ã«åäžããŸããããã¯ãNode.jsã®ãããªãã¯ãããžãŒã䜿çšããŠæ§ç¯ãããããŸãã¯PythonãC#ããã®ä»ã®èšèªã§`async/await`ãã¿ãŒã³ã䜿çšããŠãããææ°ã®é«æ§èœWebãµãŒããŒã®åºæ¬ã§ãã
- 䞊ååŠçïŒCPUããŠã³ãã¿ã¹ã¯ã®å Žåãåé¡ãå°ããªéšåã«åå²ããè€æ°ã®CPUã³ã¢ã§äžŠåã«åŠçããããšã«ãããããã©ãŒãã³ã¹ã調æŽã§ããŸããããã«ã¯ãç«¶åç¶æ ããããããã¯ãªã©ã®åé¡ãåé¿ããããã«ãã¹ã¬ãããæ³šææ·±ã管çããå¿ èŠããããŸãã
4. æ§æãšç°å¢ã®ãã¥ãŒãã³ã°
å Žåã«ãã£ãŠã¯ãã³ãŒããåé¡ã§ã¯ãããŸããããããå®è¡ãããç°å¢ãåé¡ã§ãããã¥ãŒãã³ã°ã«ã¯ãæ§æãã©ã¡ãŒã¿ãŒã®èª¿æŽãå«ãŸããå ŽåããããŸãã
- JVM/ã©ã³ã¿ã€ã ã®ãã¥ãŒãã³ã°ïŒJavaã¢ããªã±ãŒã·ã§ã³ã®å ŽåãJVMã®ããŒããµã€ãºãã¬ããŒãžã³ã¬ã¯ã¿ãŒã®çš®é¡ããã®ä»ã®ãã©ã°ã調æŽãããšãããã©ãŒãã³ã¹ãšå®å®æ§ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã
- æ¥ç¶ããŒã«ïŒããŒã¿ããŒã¹æ¥ç¶ããŒã«ã®ãµã€ãºã調æŽãããšãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ãšéä¿¡ããæ¹æ³ãæé©åããé«è² è·æã®ããã«ããã¯ãé²ãããšãã§ããŸãã
- ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒã®äœ¿çšïŒã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ãæã€ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãCDNããéçã¢ã»ããïŒç»åãCSSãJavaScriptïŒãæäŸããããšãäžå¯æ¬ ãªãã¥ãŒãã³ã°ã¹ãããã§ããCDNã¯ãäžçäžã®ãšããžãã±ãŒã·ã§ã³ã§ã³ã³ãã³ãããã£ãã·ã¥ããããããªãŒã¹ãã©ãªã¢ã®ãŠãŒã¶ãŒã¯ãåç±³ã®ãµãŒããŒã§ã¯ãªããã·ãããŒã®ãµãŒããŒãããã¡ã€ã«ãååŸããã¬ã€ãã³ã·ãåçã«ççž®ããŸãã
ãã£ãŒãããã¯ã«ãŒãïŒãããã¡ã€ã«ããã¥ãŒã³ãããã³ç¹°ãè¿ã
ããã©ãŒãã³ã¹æé©åã¯ãäžåºŠéãã®ã€ãã³ãã§ã¯ãããŸãããããã¯å埩çãªãµã€ã¯ã«ã§ããã¯ãŒã¯ãããŒã¯æ¬¡ã®ããã«ãªããŸãã
- ããŒã¹ã©ã€ã³ã®ç¢ºç«ïŒå€æŽãå ããåã«ãçŸåšã®ããã©ãŒãã³ã¹ã枬å®ããŸããããããã³ãããŒã¯ã§ãã
- ãããã¡ã€ã«ïŒçŸå®çãªè² è·ã®äžã§ãããã¡ã€ã©ãŒãå®è¡ããŠãæãéèŠãªããã«ããã¯ãç¹å®ããŸãã
- 仮説ãç«ãŠãŠèª¿æŽããïŒããã«ããã¯ãä¿®æ£ããæ¹æ³ã«ã€ããŠä»®èª¬ãç«ãŠãåäžã®ã¿ãŒã²ããã倿ŽããŸãã
- å床枬å®ïŒã¹ããã1ãšåãããã©ãŒãã³ã¹ãã¹ããå®è¡ããŸãã倿Žã¯ããã©ãŒãã³ã¹ãåäžãããŸãããïŒæªåãããŸãããïŒä»ã®å Žæã«æ°ããããã«ããã¯ãçºçããŸãããïŒ
- ç¹°ãè¿ãïŒå€æŽãæåããå Žåã¯ããããç¶æããŸããããã§ãªãå Žåã¯ãå ã«æ»ããŸããæ¬¡ã«ãã¹ããã2ã«æ»ããæ¬¡ã®æå€§ã®ããã«ããã¯ãèŠã€ããŸãã
ãã®èŠåŸæ£ããç§åŠçãªã¢ãããŒãã«ãããåãçµã¿ãåžžã«æãéèŠãªããšã«éäžããäœæ¥ã®åœ±é¿ãæç¢ºã«èšŒæã§ããŸãã
é¿ããã¹ãäžè¬çãªèœãšã穎ãšã¢ã³ããã¿ãŒã³
- æšæž¬é§åã®ãã¥ãŒãã³ã°ïŒæå€§ã®åäžã®ééãã¯ããããã¡ã€ãªã³ã°ããŒã¿ã§ã¯ãªããçŽæã«åºã¥ããŠããã©ãŒãã³ã¹ã倿Žããããšã§ããããã¯ãã»ãŒåžžã«æéã®æµªè²»ãšãããè€éãªã³ãŒãã«ã€ãªãããŸãã
- ééã£ããã®ã®æé©åïŒåããªã¯ãšã¹ãã®ãããã¯ãŒã¯åŒã³åºãã«3ç§ãããå Žåã«ãããç§ãç¯çŽãããã€ã¯ãæé©åã«çŠç¹ãåœãŠãããšãåžžã«æåã«æå€§ã®ããã«ããã¯ã«çŠç¹ãåœãŠãŸãã
- æ¬çªç°å¢ã®ç¡èŠïŒãã€ãšã³ãã®éçºçšã©ãããããã§ã®ããã©ãŒãã³ã¹ã¯ãã¯ã©ãŠãå ã®ã³ã³ããåãããç°å¢ããäœéãªãããã¯ãŒã¯äžã®ãŠãŒã¶ãŒã®ã¢ãã€ã«ããã€ã¹ã代衚ãããã®ã§ã¯ãããŸãããæ¬çªç°å¢ã«ã§ããã ãè¿ãç°å¢ã§ãããã¡ã€ã«ãšãã¹ããè¡ããŸãã
- ããããªã¡ãªããã®ããã«å¯èªæ§ãç ç²ã«ããïŒããããªããã©ãŒãã³ã¹åäžãåŸãããã«ãã³ãŒããé床ã«è€éã«ããŠä¿å®äžèœã«ããªãã§ãã ãããããã©ãŒãã³ã¹ãšæç¢ºãã®éã«ã¯ãã¬ãŒããªããããããšããããããŸããããã䟡å€ã®ãããã®ã§ããããšã確èªããŠãã ããã
çµè«ïŒããã©ãŒãã³ã¹ã®æåã®è²æ
ã³ãŒããããã¡ã€ãªã³ã°ãšããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã¯ãå¥ã ã®åéã§ã¯ãªããå šäœãæ§æãã2ã€ã®éšåã§ãããããã¡ã€ãªã³ã°ã¯è³ªåã§ããããã¥ãŒãã³ã°ã¯çãã§ããäžæ¹ã¯ä»æ¹ãªãã§ã¯åœ¹ã«ç«ã¡ãŸããããã®ããŒã¿ããªãã³ã§å埩çãªããã»ã¹ãåãå ¥ããããšã§ãéçºããŒã ã¯åœãŠæšéããè±åŽãããœãããŠã§ã¢ã«äœç³»çã§ã€ã³ãã¯ãã®ããæ¹åãå ãå§ããããšãã§ããŸãã
ã°ããŒãã«åãããããžã¿ã«ãšã³ã·ã¹ãã ã§ã¯ãããã©ãŒãã³ã¹ã¯æ©èœã§ããããã¯ããšã³ãžãã¢ãªã³ã°ã®å質ãšãŠãŒã¶ãŒã®æéãå°éããããšã®çŽæ¥çãªåæ ã§ããããã©ãŒãã³ã¹ãæèããæåïŒãããã¡ã€ãªã³ã°ã宿çãªå®è·µã§ããããã¥ãŒãã³ã°ãããŒã¿ã«åºã¥ããç§åŠã§ããæåïŒãæ§ç¯ããããšã¯ããã¯ããªãã·ã§ã³ã§ã¯ãããŸãããããã¯ãäžçäžã®ãŠãŒã¶ãŒãåã°ãããå ç¢ã§ã¹ã±ãŒã©ãã«ã§æåãããœãããŠã§ã¢ãæ§ç¯ããããã®éµã§ãã